iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Python

Python探索之旅:從基礎到實踐系列 第 12

DAY 12: 智能錯誤捕捉——深度掌握 Python 例外處理

  • 分享至 

  • xImage
  •  

在程式開發過程中,我們難免會遇到各種可能發生的錯誤,例如輸入錯誤、零除錯誤、檔案不存在等。這些錯誤如果沒有妥善處理,可能會導致程式崩潰或執行結果不正確。為了避免這些問題,我們可以使用 例外處理 (Exception Handling) 來處理程式中的各類錯誤。Python 提供了強大的 try...except...else...finally 語法來處理例外情況,確保程式能夠正常運行。


1. 例外處理的基本結構

Python 的例外處理主要透過 tryexcept 語法來實現,基本的結構如下:

try:
    # 嘗試執行的代碼
except:
    # 當發生錯誤時的處理方式

2. 使用 try...except...else...finally

當我們使用 try...except 時,還可以搭配 elsefinally 區塊。這樣可以讓程式更靈活地處理不同情況。

  • try:嘗試執行程式碼。
  • except:捕捉錯誤並執行對應的處理。
  • else:如果 try 中的程式碼沒有發生例外,則執行 else 區塊的程式碼。
  • finally:無論是否發生例外,finally 區塊的程式碼都會執行,通常用於釋放資源或清理工作。

範例:

try:
    number = int(input("請輸入一個數字: "))
    result = 10 / number
except ValueError:
    print("輸入錯誤,請輸入一個整數。")
except ZeroDivisionError:
    print("數字不能為零。")
else:
    print(f"計算結果: {result}")
finally:
    print("程式結束。")

3. 捕捉多個例外

有時,我們會遇到多種類型的錯誤。例如,當我們進行數值計算時,可能會遇到 ZeroDivisionError (零除錯誤) 或 ValueError (數值轉換錯誤)。我們可以用一個 except 區塊來同時捕捉多個例外,這樣可以簡化程式結構。

範例:捕捉多個例外

try:
    number = int(input("請輸入一個數字: "))
    result = 10 / number
except (ValueError, ZeroDivisionError) as e:
    print(f"發生錯誤: {e}")
else:
    print(f"計算結果: {result}")
finally:
    print("程式結束。")

在這個範例中,我們同時捕捉了 ValueErrorZeroDivisionError,並將錯誤訊息儲存在變數 e 中以供後續使用。


4. 自訂例外

除了 Python 內建的例外類型外,我們還可以定義自己的例外類別,以應對特定的錯誤情況。這樣可以讓我們的程式更加靈活和健壯。

範例:自訂例外

class NegativeNumberError(Exception):
    """自訂錯誤:當數字為負時拋出"""
    pass

try:
    number = int(input("請輸入一個正數: "))
    if number < 0:
        raise NegativeNumberError("數字不能為負數")
    result = 10 / number
except NegativeNumberError as e:
    print(f"自訂錯誤: {e}")
except ZeroDivisionError:
    print("數字不能為零。")
else:
    print(f"計算結果: {result}")
finally:
    print("程式結束。")

在這個例子中,我們定義了一個自訂的例外 NegativeNumberError,並在輸入負數時拋出這個錯誤。這樣我們可以根據自己的需求來設計錯誤處理邏輯。


5. 應用場景與最佳實踐

  1. 檔案處理:
    當我們處理檔案時,可能會遇到檔案不存在或讀寫錯誤的情況,這時候例外處理尤為重要。

    try:
        with open("file.txt", "r") as file:
            content = file.read()
    except FileNotFoundError:
        print("找不到檔案。")
    finally:
        print("結束檔案操作。")
    
  2. API 請求:
    當進行 API 請求時,網路連接問題或 API 回應錯誤都是常見的問題,這時可以透過例外處理來確保程式的穩定性。


6. 結論

例外處理是撰寫健壯程式的關鍵部分。透過 try...except...else...finally 語法,我們可以靈活地處理程式中可能發生的各種錯誤,從而保證程式的穩定性。同時,捕捉多個例外和自訂例外讓我們的錯誤處理變得更加具體和細緻。在進行任何具有潛在風險的操作時,都應該考慮例外處理,這樣可以確保程式在出錯時能夠有適當的反應,並且不會崩潰。


總結:
使用例外處理可以讓我們的程式更加穩定,並能夠應對各種突發的錯誤情況。無論是簡單的運算錯誤還是檔案處理問題,透過適當的 try...except 語法,我們可以確保程式能夠正確且平順地運行。


上一篇
DAY 11: 打造自己的模組——構建大型專案的核心架構
下一篇
DAY 13: 探索檔案與字符串的奧秘——從資料存取到正則表達式精通
系列文
Python探索之旅:從基礎到實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言